package edu.cast.teseg.modelo;

import java.util.Iterator;
import java.util.TreeMap;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author edgarin
 */
public class RedSocial {
    
    private TreeMap individuos = new TreeMap();
    private TreeMap relaciones = new TreeMap();
    private TreeMap matriz = new TreeMap();
    
    private int [][] matrizAdj; // Matriz de adyacencia
    private Object [] vertices; //objet sommet    
    private static int contador;
    
        
   /*      
    
    public int getPesoArista(int verticeOrigen, int verticeDestino){ // recupera la distancia
        return matrizAdj [verticeOrigen][verticeDestino];
    } 
    
  
    public int [] buscarVeticesAdj(int nodo){ // construye una tabla con lso vertices adjyacentes desde un verticeOrigen
        
        contador=0;
        for (int i = 0; i < matrizAdj[nodo].length; i++) {
            if (matrizAdj[nodo][i]>0) 
                    {contador ++; }
        }
        final int[]rep = new int [contador];
        contador=0;
        for (int i = 0; i < matrizAdj[nodo].length; i++){
            if(matrizAdj[nodo][i]>0)
            {rep[contador++]=i;}
        }
        return rep;
    } 
    */

    public RedSocial() {}
    

    public void setIndividuo(int vertice, String etiqueta){ //agrega un vertice
        Individuos individuo = new  Individuos(vertice, etiqueta);
        this.individuos.put(individuo.getId(), individuo);
        
    }
    
    public void setRelaciones(String etiqueta, int origen, int destino){
        Relaciones arista = new Relaciones();
        arista.setRelacion(etiqueta, origen, destino);
        this.relaciones.put(arista.getId(), arista);
    }
    
    public void setRelacion(int origen, int destino){ // agrega peso a las aristas
        matrizAdj [origen][destino]=1;
    }
    
    public int getTamañoRelaciones(){
        return relaciones.size();
    }
    
    public int getTamañoIndividuos(){
        return individuos.size();
    }
    
    public TreeMap getIndividuos(){
        return individuos;
    }
    
    public TreeMap getRelaciones(){
        return relaciones;
    }

    public void setMatrizAdj() throws Exception{
        Individuos ultimoVertice =(Individuos)individuos.lastEntry().getValue();
        if(ultimoVertice.getId()>getTamañoIndividuos()){
            this.matrizAdj = new int[ultimoVertice.getId()][ultimoVertice.getId()];
        }
        else
            this.matrizAdj = new int[getTamañoIndividuos()][getTamañoIndividuos()];
    }
    
    public void cargarMatriz() throws Exception{
        
        boolean haga = individuos.containsKey(0);
        
        if(haga){
            for (Iterator it = relaciones.values().iterator(); it.hasNext();) {
                Relaciones relacion = (Relaciones) it.next();
                matrizAdj[relacion.getOrigen()][relacion.getDestino()] = 1;
                matrizAdj[relacion.getDestino()][relacion.getOrigen()] = 1;
            }
        }
        if(!haga){
            for (Iterator it = relaciones.values().iterator(); it.hasNext();) {
                Relaciones relacion = (Relaciones) it.next();
                matrizAdj[relacion.getOrigen()-1][relacion.getDestino()-1] = 1;
                matrizAdj[relacion.getDestino()-1][relacion.getOrigen()-1] = 1;
            }
        }        
    }

    public int[][] getMatrizAdj() { return matrizAdj; }   
       
}
